﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Helena.Areas.Entradas.Models;
using Helena.Areas.Productos.Models;
using Helena.Areas.Reportes.Models;
using Helena.Areas.Proveedores.Models;
using Telerik.Web.Mvc;

namespace Helena.Areas.Entradas.Controllers
{
    public class DetalleEntradaController : Controller
    {
        LogicaEntrada db = new LogicaEntrada();
        LogicaProducto pro_db = new LogicaProducto();
        LogicaProveedor pvd_db = new LogicaProveedor();
        LogicaKardex kardex = new LogicaKardex();
        //
        // GET: /Entradas/DetalleEntrada/

        #region DetalleEntrada
        public ActionResult Index()
        {
            ObtenerProductos();
            ObtenerProveedores();
            Session["ProveedorID"] = 1;
            int EntradaID = Convert.ToInt16(Session["EntradaSeleccionada"].ToString());

            ViewData["EntradaSeleccionada"] = db.i_RetornarEntrada(EntradaID);
            
            List<ProductoView> productos = pro_db.i_RetornarProductos().Where(p=>p.proveedorID==1).Where(p=>p.Estado==true).ToList(); 
            List<DetalleEntradaView> salida = new List<DetalleEntradaView>();
            foreach(ProductoView p in productos)
            {
                DetalleEntradaView d = new DetalleEntradaView();
                d.ProductoID=p.ID;
                d.NombreProducto = p.Descripcion;
                salida.Add(d);
            }
            ViewData["DetalleEntrada"]=salida;
            return View();
        }

        [GridAction]
        public ActionResult ObtenerProveedor()
        {
            return View(new GridModel<ProveedorView>
            {
                Data = pvd_db.i_RetornarProveedores().Where(e => e.Estado == true).ToList()
            });
        }

        [GridAction]
        public ActionResult ObtenerProductos(String ProveedorNombre)
        {
            ProveedorNombre = ProveedorNombre ?? "HELENA TIENDAS S.A.C";
            int ProveedorID = pvd_db.i_RetornarProveedores().Where(p => p.RazonSocial == ProveedorNombre).FirstOrDefault().ID;
            Session["ProveedorID"] = ProveedorID;

            ObtenerSalida();

            return View(new GridModel<DetalleEntradaView>
            {
                Data = (List<DetalleEntradaView>)Session["salida"]
            });
        }

        [GridAction]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult InsertarDetalleEntrada(DetalleEntradaView detalle)
        {
            int ID = Convert.ToInt16(Session["EntradaSeleccionada"].ToString());
            ProductoView p= pro_db.i_RetornarProducto(detalle.ProductoID);
            kardex.IngresarEntrada(p, detalle.Cantidad, DateTime.Now);
            
            detalle.NombreProducto = p.Descripcion;
            detalle.ProveedorID = Convert.ToInt16(Session["ProveedorID"].ToString());
            detalle.EntradaID = ID;
            db.AgregarDetalleaEntrada(ID,detalle);
            
            ObtenerSalida();
            
            return View(new GridModel((List<DetalleEntradaView>)Session["salida"]));
        }

        [GridAction]
        public ActionResult ObtenerDetalles(string EntradaID )
        {
            Session["EntradaSeleccionada"] = EntradaID;
            int ID = Convert.ToInt16(Session["EntradaSeleccionada"].ToString());
            List<DetalleEntradaView> dl = db.DetallesDeUnaEntrada(ID);

            return View(new GridModel<DetalleEntradaView>
            {
                Data = (dl)
            });

        }

        [GridAction]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult EliminarDetalle(DetalleEntradaView detalle)
        {
            int EntradaID = Convert.ToInt16(Session["EntradaSeleccionada"].ToString());
            DetalleEntradaView detalle_eliminar = db.DetallesDeUnaEntrada(EntradaID).Where(d=>d.ID==detalle.ID).FirstOrDefault();
            ProductoView p = pro_db.i_RetornarProductos().Where(y => y.Descripcion == detalle_eliminar.NombreProducto).FirstOrDefault();

            kardex.IngresarEntrada(p, -detalle_eliminar.Cantidad, DateTime.Now);
            db.i_EliminarDetalle(EntradaID, detalle_eliminar);
            List<DetalleEntradaView> dl = db.DetallesDeUnaEntrada(EntradaID);
            return View(new GridModel(dl));
        }
  
        #endregion

        #region extras

        private void ObtenerProveedores()
        {
            ViewData["Proveedores"] = pvd_db.i_RetornarProveedores();
        }

        private void ObtenerProductos()
        {
            ViewData["Productos"] = pro_db.i_RetornarProductos().Where(d => d.Estado == true).ToList();
        }

        private void ObtenerSalida()
        {
            List<ProductoView> consulta = pro_db.i_RetornarProductos().Where(p => p.proveedorID == Convert.ToInt16(Session["ProveedorID"].ToString())).ToList();
            List<DetalleEntradaView> salida = new List<DetalleEntradaView>();

            foreach (ProductoView s in consulta)
            {
                DetalleEntradaView d = new DetalleEntradaView();
                d.ProductoID = s.ID;
                salida.Add(d);
            }
            Session["salida"] = salida;
        }

        #endregion

    }
}